package br.com.SAM.leitor;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.jboss.remoting.Client;

import br.com.SAM.Cliente.Cliente;
import br.com.SAM.Interfaces.IMedicamento;
import br.com.SAM.Interfaces.IMedico;
import br.com.SAM.Interfaces.IPaciente;
import br.com.SAM.Interfaces.IPessoa;
import br.com.SAM.Interfaces.IPrescricao;
import br.com.SAM.Interfaces.IProduto;
import br.com.SAM.modelos.Medicamento;
import br.com.SAM.modelos.Medico;
import br.com.SAM.modelos.Paciente;
import br.com.SAM.modelos.Pedido;
import br.com.SAM.modelos.Pessoa;
import br.com.SAM.modelos.Prescricao;
import br.com.SAM.modelos.Produto;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public class PrescricaoLeitor {
	public void listaPrescricao(String endereco) throws IOException, BiffException{
		File arquivo = new File(endereco);
		Workbook workbook = Workbook.getWorkbook(arquivo);
		Sheet sheet = workbook.getSheet(0);
		int linhas = sheet.getRows();
		IPaciente pacienteBean = (IPaciente) Cliente.gerarCliente("SAMApp/PacienteBean/remote");
		IMedico medicoBean = (IMedico) Cliente.gerarCliente("SAMApp/MedicoBean/remote");
		IPessoa pessoaBean = (IPessoa) Cliente.gerarCliente("SAMApp/PessoaBean/remote");
		IMedicamento medicamentoBean = (IMedicamento) Cliente.gerarCliente("SAMApp/MedicamentoBean/remote");
		IPrescricao prescricaoBean = (IPrescricao) Cliente.gerarCliente("SAMApp/PrescricaoBean/remote");
		/*pegando valores das celulas de acordo com o arquivo*/
		List<Prescricao> prescricoes = new ArrayList<Prescricao>();
		for (int i = 1;i<linhas ; i++){
			Prescricao prescricao = new Prescricao();
			if("".equals(sheet.getCell(0, i).getContents())){
				break;
			}
			// dados do paciente
			Cell numeroPac = sheet.getCell(0, i);
			
			Cell cnsPaciente = sheet.getCell(1,i);
			Cell nomePaciente = sheet.getCell(2,i);
			Cell nomeMaePaciente = sheet.getCell(3,i);
			Cell Responsavel = sheet.getCell(4,i);
			// dados do medico
			Cell cpfMedico = sheet.getCell(10,i);
			Cell nomeMedico = sheet.getCell(11,i);
			// dados dos medicamentos(pedidos)
			Cell codMedicamento = sheet.getCell(13,i);
			Cell qtdeMedicamento = sheet.getCell(14,i);
			Cell codMedicamento2 = sheet.getCell(15,i);
			Cell qtdeMedicamento2= sheet.getCell(16,i);
			Cell codMedicamento3 = sheet.getCell(17,i);
			Cell qtdeMedicamento3 = sheet.getCell(18,i);
			Cell codMedicamento4 = sheet.getCell(19,i);
			Cell qtdeMedicamento4 = sheet.getCell(20,i);
			// dados do autorizador
			Cell cpfAutorizador = sheet.getCell(21,i);
			Cell nomeAutorizador = sheet.getCell(22,i);
			
			// atribuindo valores aos objetos
			//paciente
			Paciente paciente = new Paciente();
		//	paciente.setIdPac(Long.parseLong(numeroPac.getContents()));
		//	System.out.println("paciente idPac"+paciente.getIdPac());
			if((paciente=pacienteBean.findByCns(cnsPaciente.getContents()))==null){
				//TODO definir outros campos de paciente nome da mae, responsavel
				paciente.setCns(cnsPaciente.getContents());
				paciente.setNome(nomePaciente.getContents());
				
				System.out.println("Paciente "+paciente.getNome() +" inserido");
				paciente= (Paciente) pacienteBean.inserir(paciente);
			}

			
			//medico
			
			Medico medico = new Medico();
			medico.setNome(nomeMedico.getContents());
			medico.setCpf(Long.parseLong(cpfMedico.getContents()));
			if ((medico=medicoBean.findByCpf(medico.getCpf()))!=null){
				System.out.println(medico.getId());
				
				//medicoBean.update(medico);
				
			}else{
				/*medico.setCpf(Long.parseLong(cpfMedico.getContents()));
				medicoBean.inserir(medico);*/
				System.out.println("medico "+medico.getNome()+" nao cadastrado");
				break;
				
			}
			
			
			
			// medicamento (produto e pedido)
			List<Pedido> pedidos = new ArrayList<Pedido>();
			Medicamento medicamento = new Medicamento();
			medicamento.setId(Long.parseLong(codMedicamento.getContents()));
			if ((medicamento = medicamentoBean.findById(medicamento.getId()))!= null){
				
				Pedido pedido = new Pedido();
				pedido.setQuantidade(Integer.parseInt(qtdeMedicamento.getContents()));
				pedido.setMedicamento(medicamento);
				pedido.setDataPedido(new Date());
				pedidos.add(pedido);
				System.out.println("Pedido >> "+pedido.getMedicamento().getId()+" >>> " +pedido.getQuantidade());
			}
			
			
			
			
			Medicamento medicamento1 = new Medicamento();
			medicamento1.setId(Long.parseLong(codMedicamento2.getContents()));
			if ((medicamento1 = medicamentoBean.findById(medicamento1.getId()))!= null){
				Pedido pedido1 = new Pedido();
				pedido1.setQuantidade(Integer.parseInt(qtdeMedicamento2.getContents()));
				pedido1.setMedicamento(medicamento1);
				pedido1.setDataPedido(new Date());
				pedidos.add(pedido1);
				System.out.println("Pedido1 >> "+pedido1.getMedicamento().getId()+" >>> "+ pedido1.getQuantidade());
			}
			
			Medicamento medicamento2 = new Medicamento();
			medicamento2.setId(Long.parseLong(codMedicamento3.getContents()));
			if ((medicamento2 = medicamentoBean.findById(medicamento2.getId()))!= null){
				Pedido pedido2 = new Pedido();
				pedido2.setQuantidade(Integer.parseInt(qtdeMedicamento3.getContents()));
				pedido2.setMedicamento(medicamento2);
				pedido2.setDataPedido(new Date());
				pedidos.add(pedido2);
				System.out.println("Pedido2 >> "+pedido2.getMedicamento().getId()+" >>> "+ pedido2.getQuantidade());
			}
			Medicamento medicamento3 = new Medicamento();
			medicamento3.setId(Long.parseLong(codMedicamento4.getContents()));
			if ((medicamento3 = medicamentoBean.findById(medicamento3.getId()))!= null){
				Pedido pedido3 = new Pedido();
				pedido3.setQuantidade(Integer.parseInt(qtdeMedicamento4.getContents()));
				pedido3.setMedicamento(medicamento2);
				pedido3.setDataPedido(new Date());
				pedidos.add(pedido3);
				System.out.println("Pedido3 >> "+pedido3.getMedicamento().getId()+" >>> "+ pedido3.getQuantidade());
			}
			
			//autorizador (pessoa)
			Pessoa autorizador = new Pessoa();
			autorizador.setCpf(Long.parseLong(cpfAutorizador.getContents()));
			autorizador.setNome(nomeAutorizador.getContents());
			if((autorizador= pessoaBean.findByCpf(autorizador.getCpf()))==null){
				pessoaBean.inserir(autorizador);
			}
			
			System.out.println("Autorizador "+ autorizador.getNome());
			
			
			// colocando dentro do objeto prescricao
		
			if(pedidos.size()!=0){
				prescricao.setIdApac(Long.parseLong(numeroPac.getContents()));
				prescricao.setPedidos(pedidos);
				prescricao.setPaciente(paciente);
				prescricao.setMedico(medico);
				prescricao.setAutorizador(autorizador);
				prescricao.setDataPrescricao(new Date());
				prescricaoBean.inserir(prescricao);
				prescricoes.add(prescricao);
			}
			
			
		}
		Prescricao temp = new Prescricao();
		temp = prescricoes.get(0);
		for(Pedido p: temp.getPedidos()){
			System.out.println("Pedido de quantidade"+p.getQuantidade()+"no do produto "+p.getMedicamento().getId());
		}
		System.out.println("ultima linha Nome medico+ "+prescricoes.get(0).getMedico().getNome());
		
	}

}
